#ifndef FILE_MANAGER_H
#define FILE_MANAGER_H

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <dirent.h>
#include <fcntl.h>
#include <errno.h>
#include <time.h>
#include <sys/file.h>

// 常量定义
#define MAX_COMMAND_LENGTH 1024
#define MAX_ARGS 5
#define BUFFER_SIZE 4096
#define MAX_LOCKED_FILES 10

// 锁定文件信息结构体
typedef struct {
    FILE *file;  // 文件指针
    int fd;      // 文件描述符
    char path[512];  // 文件路径
} LockedFile;

// 简单的文件信息结构体
typedef struct {
    char name[256];
    char path[512];
    unsigned long size;
    time_t modified_time;
    mode_t permissions;
    int is_directory;
} SimpleFileInfo;

// 文件锁类型枚举
typedef enum {
    LOCK_READ,  // 共享读锁
    LOCK_WRITE  // 排他写锁
} LockType;

// 全局变量声明
extern LockedFile locked_files[MAX_LOCKED_FILES];
extern int num_locked_files;

// 核心功能函数声明
void show_prompt();
void show_help();
void parse_command(char *command, char **args, int *arg_count);
int execute_command(char **args, int arg_count);

// 目录操作函数声明
int list_directory(const char *path);
int create_directory(const char *path);

// 文件操作函数声明
int remove_file(const char *path);
int copy_file_stdio(const char *src_path, const char *dest_path);
int copy_file_sysio(const char *src_path, const char *dest_path);
int view_file(const char *path);
int create_file(const char *path);
int write_to_file(const char *path, const char *content, int keep_lock);

// 文件锁相关函数声明
int lock_file(int fd, LockType type);
int unlock_file(int fd);
int file_is_locked(const char *path);
int lock_file_by_path(const char *path, LockType type);
int unlock_file_by_path(const char *path);
void cleanup_locked_files();

// 工具函数声明
int get_file_info(const char *path, SimpleFileInfo *info);
void print_file_info(const SimpleFileInfo *info);

#endif /* FILE_MANAGER_H */